/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.manager.editar;

import br.com.foxinline.enums.Nacionalidade;
import br.com.foxinline.enums.TipoProfissional;
import br.com.foxinline.modelo.Bairro;
import br.com.foxinline.modelo.Endereco;
import br.com.foxinline.modelo.MicroArea;
import br.com.foxinline.modelo.Profissional;
import br.com.foxinline.servico.BairroServico;
import br.com.foxinline.servico.EnderecoServico;
import br.com.foxinline.servico.MicroAreaServico;
import br.com.foxinline.servico.ProfissionalServico;
import br.com.foxinline.utilitario.Caracter;
import br.com.foxinline.utilitario.Msg;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author ely
 */
@ManagedBean
@ViewScoped
public class ManagerEditarProfissional {

    @EJB
    ProfissionalServico profissionalServico;
    @EJB
    EnderecoServico enderecoServico;
    @EJB
    BairroServico bairroServico;
    
    @EJB
    MicroAreaServico microAreaServico;
    
    private Profissional profissionalEditar;
    private Profissional profissionalVisualizar;
    private String editarProfissional;
    private String visualizarProfissional;
    private boolean disableEnderecoImovel;
    private boolean mensagemCep;

    @PostConstruct
    public void init() {
        profissionalEditar = new Profissional();
        profissionalVisualizar = new Profissional();

        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        editarProfissional = params.get("editarProfissional");
        visualizarProfissional = params.get("visualizarProfissional");
        paramPost();
    }

    public void atualizar() {
        Bairro bairro;
        try {
            profissionalEditar.setCpf(Caracter.removecaracter(profissionalEditar.getCpf()));
            profissionalEditar.getEndereco().setCep(Caracter.removecaracter(profissionalEditar.getEndereco().getCep()));

            bairro = bairroServico.findBairro(profissionalEditar.getEndereco().getBairro().getNome());
            if (bairro.getId() == null) {
                bairroServico.salvar(profissionalEditar.getEndereco().getBairro());
                profissionalEditar.getEndereco().setBairro(bairro);
            } else {
                profissionalEditar.getEndereco().setBairro(bairro);
            }

            profissionalServico.atualizar(profissionalEditar);
            Msg.messagemInfo(Msg.SuccessFull);
           

        } catch (Exception erro) {
        }
    }

    public void paramPost() {
        try {
            if (editarProfissional != null) {
                profissionalEditar = profissionalServico.pesquisar(Long.parseLong(editarProfissional));
                if(profissionalEditar.getEndereco() == null){
                    profissionalEditar.setEndereco(new Endereco());
                }
                if(profissionalEditar.getMicroArea() == null){
                    profissionalEditar.setMicroArea(new MicroArea());
                }
               
            }
            if (visualizarProfissional != null) {
                profissionalVisualizar = profissionalServico.pesquisar(Long.parseLong(visualizarProfissional));
                 if(profissionalVisualizar.getEndereco() == null){
                    profissionalVisualizar.setEndereco(new Endereco());
                }
            }

        } catch (Exception erro) {
            erro.printStackTrace();
        }
    }

    public void existeEndereco() {
        Endereco endereco;

        endereco = enderecoServico.existCep(profissionalEditar.getEndereco());

        if (endereco != null) {
            profissionalEditar.setEndereco(endereco);
            disableEnderecoImovel = true;
            mensagemCep = false;
        } else {
            mensagemCep = true;
            disableEnderecoImovel = false;
        }
    }
    
     public List<MicroArea> todasMicroArea() {
        return microAreaServico.pesquisarTodos();
    }

    public List<SelectItem> tipoProfissional() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (TipoProfissional tipo : TipoProfissional.values()) {
            items.add(new SelectItem(tipo, tipo.getName()));
        }
        return items;
    }

    public List<SelectItem> nacionalidade() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (Nacionalidade tipo : Nacionalidade.values()) {
            items.add(new SelectItem(tipo, tipo.getNome()));
        }
        return items;
    }

    public Profissional getProfissionalEditar() {
        return profissionalEditar;
    }

    public void setProfissionalEditar(Profissional profissionalEditar) {
        this.profissionalEditar = profissionalEditar;
    }

    public Profissional getProfissionalVisualizar() {
        return profissionalVisualizar;
    }

    public void setProfissionalVisualizar(Profissional profissionalVisualizar) {
        this.profissionalVisualizar = profissionalVisualizar;
    }

    public boolean isDisableEnderecoImovel() {
        return disableEnderecoImovel;
    }

    public void setDisableEnderecoImovel(boolean disableEnderecoImovel) {
        this.disableEnderecoImovel = disableEnderecoImovel;
    }

    public boolean isMensagemCep() {
        return mensagemCep;
    }

    public void setMensagemCep(boolean mensagemCep) {
        this.mensagemCep = mensagemCep;
    }
}
